<?php namespace system\model;

use houdunwang\model\Model;

class Category extends Model
{
	//数据表
	protected $table = "category";

	//允许填充字段
	protected $allowFill = ['*'];

	//禁止填充字段
	protected $denyFill = [];

	//自动验证
	protected $validate = [
		//['字段名','验证方法','提示信息',验证条件,验证时间]
		['cate_name', 'required', '请填写栏目名称', self::MUST_VALIDATE, self::MODEL_BOTH],
		['cate_description', 'required', '请填写', self::MUST_VALIDATE, self::MODEL_BOTH],

	];

	//自动完成
	protected $auto = [
		//['字段名','处理方法','方法类型',验证条件,验证时机]
	];

	//自动过滤
	protected $filter = [
		//[表单字段名,过滤条件,处理时间]
	];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps = true;

	/**
	 *  获得栏目数据
	 */
	public function getAllCate()
	{
//		return $this->get()->toArray();
		//Arr::tree($data, $title, $fieldPri = 'cid', $fieldPid = 'pid'); 树装结构
		//$data                 	数组
		//$title                	字段名称
		//$fieldPri             	主键 id
		//$fieldPid             	父 id
		return Arr::tree($this->get()->toArray(), 'cate_name', $fieldPri = 'cate_cid', $fieldPid = 'cate_pid');

	}


	/**
	 *    获取除了自己还有 自己儿子级的 数据
	 */

	public function getSonCateData($cate_cid)
	{
		// 递归方法找子集


		$cids = $this->getSon($this->get()->toArray(), $cate_cid);

//	  	 p($cids);   这边打印出来应该是 当前数据的子集

		//2. 把  自己追加进去

		$cids[] = $cate_cid;

//		p($cids);  这边打印出来是   自己和  自己的子集

		//3. 把自己和子集踢出
		//  wherenotin  是不在里面的数据
		$res = $this->whereNotIn('cate_cid', $cids)->get()->toArray();
		//p($res);
		return Arr::tree($res, 'cate_name', 'cate_cid', 'cate_pid');


	}


	/**
	 *   递归找子集
	 *
	 */

	public function getSon($data, $cate_cid)
	{

		// 使用静态变量 ，  不会是每次调用自己的时候 temp  都是空数组开始
		static $temp = [];

		foreach ($data as $k => $v) {
			// 1.从$v['cate_pid']是所有数据   找到  pid = cate_cid 那条数据
			if ($v['cate_pid']==$cate_cid) {
				//  catepid    ==    cate  _id  相等说明是父子级  不能选
				//echo 1;
				//说明这条数据是我的儿子
				$temp[] = $v['cate_cid'];//把找到的这条数据对应的cid存起来    2. 吧上面相等的那条数存起来
				$this->getSon($data, $v['cate_cid']);//接下来应该继续去找$v['cate_cid'],它的子集数据
				// 3. 然后在这  递归  继续找  和找出来那条数据相等  cate_cid  一直到 找不到为止
			}
		}
		return $temp;

	}

	/*
	 * 删除
	 */
	public function del($cate_cid)
	{


		$model = Category::find($cate_cid);


		//增加判断   如果他又子集不让他删除

		if ($this->where('cate_pid', $cate_cid)->get()) {
			// 错误消息存储到模型

			$this->setError('请先删除子集栏目');


			return false;
		}


		//删除当前数据
		return $model->destory();
	}


}























































